#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
创建简单的PNG图标文件
使用内置库，无需安装额外依赖
"""

import os

def create_simple_png_icon(size, filename):
    """创建简单的PNG图标文件"""
    # PNG文件的基本结构（最小化的PNG）
    # 这是一个1x1像素的透明PNG，然后我们扩展它
    
    # PNG文件头
    png_header = b'\x89PNG\r\n\x1a\n'
    
    # IHDR块 (图像头信息)
    width = size
    height = size
    bit_depth = 8
    color_type = 6  # RGBA
    compression = 0
    filter_method = 0
    interlace = 0
    
    ihdr_data = (
        width.to_bytes(4, 'big') +
        height.to_bytes(4, 'big') +
        bit_depth.to_bytes(1, 'big') +
        color_type.to_bytes(1, 'big') +
        compression.to_bytes(1, 'big') +
        filter_method.to_bytes(1, 'big') +
        interlace.to_bytes(1, 'big')
    )
    
    ihdr_crc = calculate_crc(b'IHDR' + ihdr_data)
    ihdr_chunk = (
        len(ihdr_data).to_bytes(4, 'big') +
        b'IHDR' +
        ihdr_data +
        ihdr_crc.to_bytes(4, 'big')
    )
    
    # IDAT块 (图像数据)
    # 创建一个简单的蓝色圆形图标
    idat_data = create_image_data(size)
    idat_crc = calculate_crc(b'IDAT' + idat_data)
    idat_chunk = (
        len(idat_data).to_bytes(4, 'big') +
        b'IDAT' +
        idat_data +
        idat_crc.to_bytes(4, 'big')
    )
    
    # IEND块 (文件结束)
    iend_crc = calculate_crc(b'IEND')
    iend_chunk = (
        (0).to_bytes(4, 'big') +
        b'IEND' +
        iend_crc.to_bytes(4, 'big')
    )
    
    # 组合完整的PNG文件
    png_data = png_header + ihdr_chunk + idat_chunk + iend_chunk
    
    # 写入文件
    with open(filename, 'wb') as f:
        f.write(png_data)
    
    print(f"已生成: {filename} ({size}x{size})")

def calculate_crc(data):
    """计算CRC32校验和"""
    crc_table = []
    for i in range(256):
        c = i
        for j in range(8):
            if c & 1:
                c = 0xEDB88320 ^ (c >> 1)
            else:
                c = c >> 1
        crc_table.append(c)
    
    crc = 0xFFFFFFFF
    for byte in data:
        crc = crc_table[(crc ^ byte) & 0xFF] ^ (crc >> 8)
    return crc ^ 0xFFFFFFFF

def create_image_data(size):
    """创建图像数据 - 简单的蓝色圆形"""
    # 使用zlib压缩（简化版，实际应该使用zlib库）
    # 这里我们创建一个非常简单的图像数据
    
    # 对于小尺寸图标，我们创建一个简单的模式
    if size <= 16:
        # 16x16: 简单的蓝色背景
        data = b'\x00'  # 过滤器类型
        for y in range(size):
            for x in range(size):
                # 简单的蓝色像素
                data += b'\x4A\x90\xE2\xFF'  # RGBA: 蓝色，不透明
        return data
    else:
        # 较大尺寸：创建渐变效果
        data = b'\x00'  # 过滤器类型
        center = size // 2
        for y in range(size):
            for x in range(size):
                # 计算到中心的距离
                dx = x - center
                dy = y - center
                distance = (dx * dx + dy * dy) ** 0.5
                
                if distance < center * 0.8:
                    # 圆形内部：蓝色
                    data += b'\x4A\x90\xE2\xFF'
                else:
                    # 圆形外部：透明
                    data += b'\x00\x00\x00\x00'
        return data

def create_blank_icon(size, filename):
    """创建空白图标（透明背景）"""
    # PNG文件头
    png_header = b'\x89PNG\r\n\x1a\n'
    
    # IHDR块
    width = size
    height = size
    bit_depth = 8
    color_type = 6  # RGBA
    compression = 0
    filter_method = 0
    interlace = 0
    
    ihdr_data = (
        width.to_bytes(4, 'big') +
        height.to_bytes(4, 'big') +
        bit_depth.to_bytes(1, 'big') +
        color_type.to_bytes(1, 'big') +
        compression.to_bytes(1, 'big') +
        filter_method.to_bytes(1, 'big') +
        interlace.to_bytes(1, 'big')
    )
    
    ihdr_crc = calculate_crc(b'IHDR' + ihdr_data)
    ihdr_chunk = (
        len(ihdr_data).to_bytes(4, 'big') +
        b'IHDR' +
        ihdr_data +
        ihdr_crc.to_bytes(4, 'big')
    )
    
    # IDAT块 - 全透明
    idat_data = b'\x00'  # 过滤器类型
    for y in range(size):
        for x in range(size):
            idat_data += b'\x00\x00\x00\x00'  # 完全透明
    
    idat_crc = calculate_crc(b'IDAT' + idat_data)
    idat_chunk = (
        len(idat_data).to_bytes(4, 'big') +
        b'IDAT' +
        idat_data +
        idat_crc.to_bytes(4, 'big')
    )
    
    # IEND块
    iend_crc = calculate_crc(b'IEND')
    iend_chunk = (
        (0).to_bytes(4, 'big') +
        b'IEND' +
        iend_crc.to_bytes(4, 'big')
    )
    
    # 组合完整的PNG文件
    png_data = png_header + ihdr_chunk + idat_chunk + iend_chunk
    
    # 写入文件
    with open(filename, 'wb') as f:
        f.write(png_data)
    
    print(f"已生成空白图标: {filename} ({size}x{size})")

def main():
    """主函数"""
    # 确保icons目录存在
    icons_dir = "icons"
    if not os.path.exists(icons_dir):
        os.makedirs(icons_dir)
    
    # 图标尺寸列表
    icon_sizes = [
        (16, "icon16.png"),
        (32, "icon32.png"),
        (48, "icon48.png"),
        (128, "icon128.png")
    ]
    
    print("开始生成Chrome插件图标...")
    
    # 生成所有图标
    for size, filename in icon_sizes:
        filepath = os.path.join(icons_dir, filename)
        try:
            # 对于小图标使用简单设计，大图标使用空白
            if size <= 16:
                create_simple_png_icon(size, filepath)
            else:
                create_blank_icon(size, filepath)
        except Exception as e:
            print(f"生成 {filename} 时出错: {e}")
            # 如果出错，创建最小的空白图标
            try:
                create_blank_icon(size, filepath)
            except:
                print(f"无法生成 {filename}")
    
    print("\n图标生成完成！")
    print("生成的文件:")
    for size, filename in icon_sizes:
        filepath = os.path.join(icons_dir, filename)
        if os.path.exists(filepath):
            print(f"  ✓ {filename} ({size}x{size})")
        else:
            print(f"  ✗ {filename} (生成失败)")

if __name__ == "__main__":
    main() 